package net.hymnal.church;

import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.util.Log;
import android.view.KeyEvent;
import android.view.View;
import android.widget.EditText;
import android.widget.TextView;

/**
 * Активити выбора гимна
 */
public class OpenHymnActivity extends Activity implements View.OnClickListener {
    private static final String TAG = OpenHymnActivity.class.getName();
    /**
     * Поле ввода номера гимна
     */
    private EditText hymnNumberEditText;
    /**
     * Поле ввода текста для поиска по гимнах
     */
    private EditText searchEditText;

    /**
     * Метод парсит строку ввода номера гимна
     *
     * @return номер гимна, но в случаи ошибки возвращяет -1
     */
    private int getChoosedHymn() {
        String str = String.valueOf(hymnNumberEditText.getText());
        if (str.equals("")) {
            return -1;
        }
        int selectedHymn;
        try {
            selectedHymn = Integer.parseInt(str);
        } catch (NumberFormatException e) {
            Log.i(TAG, e.getMessage());
            return -1;
        }
        if ((selectedHymn < 0) || (selectedHymn > HymnsManager.getNumberHymns())) {
            return -1;
        } else
            return selectedHymn;
    }

    /**
     * Метод предназначен исключительно для открытия гимна
     *
     * @param number номер гимна для открытия в HymnActivity
     * @return существует ли такой гимн в базе
     */
    private boolean openHymn(int number) {
        if (number < 1)
            return false;
        HymnsManager.resetSelection();
        HymnActivity.setSelectedHymn(number - 1);
        startActivityForResult(new Intent(this, HymnActivity.class), 0);
        return true;
    }

    /**
     * Начать поиск данной строки во всех гимнах и перейти в активити, где будет отображен список
     *
     * @return удалось ли найти такую строку хоть в одном из гимнов
     */
    private boolean startSearch() {
        HymnsManager.resetSelection();

        String subString = String.valueOf(searchEditText.getText());
        if (subString.length() < 1) {
            return false;
        }

        if (HymnsManager.selectHymns(subString)) {
            Intent myIntent = new Intent(this, SearchActivity.class);
            startActivityForResult(myIntent, 0);
        }
        return true;
    }

    /**
     * Инициализация полей ввода текста,
     * добавление обработчиков на нажатие клавиши готово (Done и Search) на клавиатуре
     */
    private void initControls() {
        hymnNumberEditText = (EditText) findViewById(R.id.hymn_number_edit_text);
        hymnNumberEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                return openHymn(getChoosedHymn());
            }
        });

        searchEditText = (EditText) findViewById(R.id.search_edit_text);
        searchEditText.setOnEditorActionListener(new TextView.OnEditorActionListener() {
            @Override
            public boolean onEditorAction(TextView v, int actionId, KeyEvent event) {
                return startSearch();
            }
        });
    }

    @Override
    public void onCreate(Bundle savedInstanceState) {
        setTheme(new Settings(this).getTheme());
        super.onCreate(savedInstanceState);
        setContentView(R.layout.select_search);
        initControls();
    }

    /**
     * Обработчик для кнопок поиска и перехода на выбранный гимн<br>
     * Прописано select_search.xml
     */
    @Override
    public void onClick(View button) {
        //По идентификатору смотрим какая это кнопка
        switch (button.getId()) {
            case R.id.search_line_button:
                startSearch();
                break;
            case R.id.open_hymn_button:
                openHymn(getChoosedHymn());
                break;
        }
    }
}